Summary & Introduction

Based on the data exploration/visualization I conducted in a previous document, the following metrics were determined to be potentially good features to be used for examining individual differences:

  • Features of overall eye/head movement pattern (SDE)
    • Elipse area (Gaussian)
    • Theta (Gaussian)
    • Eccentricity (negative skewed Gaussian/some other non-linear function)
  • Features of individiual fixation/movement
    • Direction (Gaussian)
    • Angle change (Gaussian)
    • Fixation duration (Gaussian)
    • Head rotation (Gaussian)

In a separate document, I modeled eccentricity using different non-linear functions. Here, I will use (a subset of) the features mentioned above to examine individual differences using this dataset.

Given how much data there was for this VR project, our team decided to focus on examining individual differences in head movement.

Though there has not been a lot of work done in this area, one thing that has been brought up in the literature was the fact that individuals may be categorized into “movers” vs “non-movers” based on their head movement data. As such, I was tasked with testing this particular hypothesis by taking a machine learning approach.

Based on the features that were derived, we focused specifically on the following features:

  • Overall head movement pattern
    • Elipse area
    • Theta/angle of the elipse
    • Eccentricity (i.e., how stretched out the elipse was)
  • Head rotation

Head movement amplitude was not considered as the measure was derived based on eye movement fixations and thus might be somewhat arbitrary. Head movement direction and angle were also not considered for similar reasons.

Though the x/y coordinates of individual head movements are generally somewhat tied to fixations, they exist within an overall region and as such, metrics that capture overall head movement patterns may suffer less from the issue mentioned above. Likewise, the head rotation data sampled in the experiment provide a rough range of the degree to which individuals rotate their head.

Note: For eccentricity, I used the coefficients by fitting the data using an asymptotic regression function, as it fit the data the best overall.

Model-Based Clustering

For this project, I focused on using model-based clustering for examining individual differences in head movements. The advantage of using this type of clustering method is that it uses Bayesian Information Criteria (BIC) to determine the optimal number of clusters/groups, based on available data. This differs from other clustering techniques (e.g., hierarchical clustering), which tend to be more “heuristics”-based in that there are no “hard numeric values” for determining the optimal number of clusters.

Load libraries:

Load data:

Correlation Plots

Below are the features (and associated parameters) and how well they correlate with one another.

 

As seen in the correlation plot, there are some parameters that are highly correlated with one another (e.g., area.mean & area.sd, asym.int & asym.lograte). Since the cluster solutions would be pretty sensitive to the input, I tried a few different feature combinations (removing or retaining the highly correlated ones).

Models:

Model 1: All Data Included

Note: features should be standardized since we want the units to be somewhat comparable. In this case, I’ve simply standardized everything, but it may be better to consider keeping the parameters of each feature (e.g., mean & sd) on the same scale, while standardizing each feature (e.g., area vs rotation).

 

As shown in the figure, there seem to be 3 solutions. The “best” solution is almost always modeling each individual as a single cluster (or pairs of clusters), but since we’re interested in seeing whether we can extract meaningful individual differences, typically, we examine solutions for between 2-9/10 clusters.

 

Here, we see that the optimal solution between K of 1-10 is a 3-cluster solution.

Model 2: Removing area.sd

One issue with the previous cluster solution is that it contained some fairly “redundant” measures. Reundancy can result in a model that is overfitted and also take longer for the algorithm to reach a solution (this latter issue is probably negligible given that there are relatively few observations/examples, but as the number of observation increases, feature reduction will become increasingly more important).

In this project, I will simply be removing one of the features. There are, however, other ways to reduce features (e.g., dimension reduction).

First I’m going to start off by removing the area.sd variable from the dataset.

 

Compared to the previous solution, it seems that the optimal solutions are at K = 2, 13, and 21. Below is a closer look at the first part of the graph.

 

Note: I also tried removing the area.mean measure instead of the area.sd measure and the cluster solutions were fairly similar, K = 2, 13, 21

Model 3 : Removing both area.sd & asym.int

Next, I’ll be looking at what happens to the model when I remove asym.int from the data.

 

Compared to the previous solution, it seems that the optimal solutions are at K = 2, 13, and 21. Below is a closer look at the first part of the graph.

Model 4 : Removing both area.sd & asym.lograte

Interestingly, the cluster solution for removing asym.lograte differed from that of removing asym.int (model 3).

 

Here, we’re getting local optimas at of K = 3, 14, 20

Comparing Model Results

I created an alluvial graph to help compare and visualize across the different model classifications. As shown in the graph below, the results actually seems pretty consistent.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.

But what does the data look like? Below, I’ve categorized individuals’ data into groups based on the classifications in Model 2/3 since they were the most consistent models:

Visualization of Data
Group 1:

group 1 angle group 1 rotation

Group 2: Stable

group 2 angle group 2 rotation

As shown in these graphs, it would appear that the classification is mainly on how sporadic the head movement pattern seems to be, rather than whether individuals were or weren’t movers.

Interior Space Data

Do the Results Replicate?

Can the classification derived from the outdoor scenes be used to make reasonable predictions about the group membership based on the indoor data set? Here, i’m using the same model as the one described above, but for outdoor space, and using that to make predictions about the group membership of individuals in

How well do these predictions match the mclust results?

Based on the model, the results don’t actually look too terrible. Keep in mind that there were only 21 participants in the data used for training (i.e., a fairly small training set). As a proof of concept, this definitely seems like a promising approach.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.

## Warning in to_lodes_form(data = data, axes = axis_ind, discern =
## params$discern): Some strata appear at multiple axes.